#include "home.h"
#include "ui_home.h"


Home::Home(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Home)
{
    ui->setupUi(this);

    qvbNames << "日光次数(min)" << "紫外次数(min)" << "日光(hour)" << "紫外次数(hour)";
    int i=0;
    // 创建 数据集
    for (;i<qvbNames.size();i++) {
        qvb.push_back(new QBarSet(qvbNames.at(i)));
    }
    // 监听用户设置数据按钮
    connect(ui->pushButton, &QPushButton::clicked, this,[&](){
        QString daylightMin = ui->daylightMin->text(); // 日光
        QString daylightHv = ui->daylightHv->text();
        QString ultravioletMin = ui->ultravioletMin->text(); // 紫外
        QString ultravioletHv = ui->ultravioletHv->text();
        bool ok; // 判断参数有效性
        int tmp;
        tmp = daylightMin.toInt(&ok);
        if(ok)
            *(qvb.at(0)) << tmp; // 将用户输入的值加入集合
        else
            *(qvb.at(0)) << 0;
        tmp = ultravioletMin.toInt(&ok);
        if(ok)
            *(qvb.at(1)) << tmp; // 将用户输入的值加入集合
        else
            *(qvb.at(1)) << 0;
        tmp = daylightHv.toInt(&ok);
        if(ok)
            *(qvb.at(2)) << tmp; // 将用户输入的值加入集合
        else
            *(qvb.at(2)) << 0;
        tmp = ultravioletHv.toInt(&ok);
        if(ok)
            *(qvb.at(3)) << tmp; // 将用户输入的值加入集合
        else
            *(qvb.at(3)) << 0;
        showBar();
        emit actionOpt(QString("用户设置 光m=%1 光h=%2 紫m=%3 紫h=%4" )
                       .arg(daylightMin).arg(daylightHv).arg(ultravioletMin).arg(ultravioletHv));
    });
    // 默认展示一个空图
    showBar();
}

Home::~Home()
{
    delete ui;
}

void Home::showBar()
{
    int i=0;
    QBarSeries *series = new QBarSeries(); // 柱形图
    for (i=0;i<qvb.size();i++) {
        series->append(qvb.at(i));
    }

    int min = qvb.size() < 5 ? 6 : qvb.size()+1;
    QStringList categories;// 设置y轴名称
    for (i=1;i<min;i++) {
        categories << QString::number(i);
    }

    QBarCategoryAxis *axis = new QBarCategoryAxis();
    axis->append(categories);

    QChart *chart = new QChart();
    chart->addSeries(series); // 绘制数据系列
    chart->setTitle("光照统计"); // 设置图像标题
    chart->setAnimationOptions(QChart::SeriesAnimations); // 在添加或移除数据系列时使用动画效果
    chart->createDefaultAxes();//创建默认的左侧的坐标轴（根据 QBarSet 设置的值）
    chart->setAxisX(axis, series);//设置坐标轴

    chart->legend()->setVisible(true); //设置图例为显示状态
    chart->legend()->setAlignment(Qt::AlignBottom);//设置图例的显示位置在底部

    QChartView *chartView = new QChartView(chart);  // 将图像绘制在qchart控件中
    chartView->setRenderHint(QPainter::Antialiasing); // 启用抗锯齿，使得绘制的图形边缘更加平滑和清晰

    QVBoxLayout *boxLayout = new QVBoxLayout();
    boxLayout->addWidget(chartView);

    QLayout *localLayout = ui->widget_2->layout(); // 获取上一次布局
    if(localLayout) // 清空布局
    {
        QVBoxLayout *dboxLayout = (QVBoxLayout *)localLayout; // 获取布局
        QChartView *dchartView = (QChartView *)dboxLayout->widget(); // 获取布局加载的空间
        delete dchartView;
        delete dboxLayout;
    }
    ui->widget_2->setLayout(boxLayout); // 设置布局
}
